Jump to content
  • 0

И снова window.open


Spavel_74
 Share

Question

MyWin=window.open("Url","MyWin");

если окно есть, даже если переменной MyWin нет. Url пойдет в location окна MyWin и перезапустит его. А если окна нет, созда?тся новое.

Возможно ли отловить момент когда окно созда?тся как новое, и момент когда окно перезагружается с location = Url?

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

такое ощущение что сегодня воскресенье, а вчера была суббота, а позавчера тяпница, в которую у многих предновогодние корпоративки, потому никого в сети нет... во всяком случае ася пустует - онлайн меньше 30 контактов из 400+

Link to comment
Share on other sites

  • 0
Такое ощущение что все кто здесь, вообще плохо знакомы с объектами - window и их иерархией.

Или что то знают, но и то от части....

А у меня такое ощущение, что Вы - неисправимый попрошайка. Хотя, справедливости ради, нужно признать то, что попрошайка Вы довольно изобретательный. Вы всякий раз придумываете какой-нибудь новый способ выклянчить ответ на свой вопрос. Чтобы не быть голословным, приведу пару-тройку цитат:

Подскажите кодом как дождатся загрузки...

Люди ну помогите кто нибудь.

Подскажите плиз что нетак, не 'жмотьте' знания.

Теперь решили прибегнуть к иной тактике - попытаться задеть самолюбие тех, кто не отвечает на ваш "зов о помощи".

Но неужели Вам не пришла в голову мысль, что Вам не отвечают лишь потому, что ваш вопрос просто неинтересен? Дело в том, что о проблемах подобного рода и способах их решения пишут в книгах "для самых маленьких", которые, как правило, в своих названиях имеют два, общих для всех этих книг, слова - "для чайников". Именно поэтому никто не хочет объяснять, фигурально выражаясь, как вскипятить воду в чайнике, или же, например (извините за очередную метафору), как нарезать хлеб при помощи ножа.

Тем не менее, у Вас всегда есть шанс получить ответ, если вместо того, чтобы прибегать к своим примитивным уловкам, Вы воспользуетесь советами и рекомендациями, которые изложены в известном руководстве под названием Как правильно задавать вопросы. Этот документ может не только научить задавать вопросы, но и наверняка сумеет помочь изменить мировоззрение и расширить кругозор (а это, как известно, бывает только к лучшему).

Link to comment
Share on other sites

  • 0

Дело в том что это очень даже интересно. Если бы было не интересно, и топика бы небыло

BarrWindows = new Array(); // используется в OpenMoreData
function OpenMoreData(fel,nameopermore)
{
var n=0;
var objbutton = window.event.srcElement;

var fieldform_id = objbutton.getAttribute("fieldform_id");
var temp="obj=document."+fel.id+"."+nameopermore+";";

try {eval(temp);}
catch (exception) {obj=null; fieldform_id=null;}

if ((obj!=null) && (fieldform_id!=null))
{
var name_priflabel = objbutton.getAttribute("priflabel")+obj.name;
var item_count=obj.length;
if ((item_count==1) && (obj.options[0]!=null) && (obj.options[0].value==0)) item_count=0;
if (item_count==0) alert("Внимание, объект пуст!nНет необходимости открывать данные этого объекта.");
else
{
var name_resourceobj=fel.id+"."+obj.name;
var namewin=fel.id+'_'+obj.name;
var namewin_new=fel.id+'_'+obj.name+'_'+randomNumber();
///
n=0;
while(n != BarrWindows.length)
{
if (BarrWindows[n].indexOf(namewin)>-1)
{
namewin=BarrWindows[n];
break;
}
n=n+1;
}
if (n==BarrWindows.length)
{
BarrWindows[BarrWindows.length]=namewin_new;
namewin=namewin_new;
}
///
evaltext=" var line = 'openmoredata.php?idfield='+fieldform_id;n";
evaltext=evaltext+" "+ namewin +" =window.open(line,namewin,'top=150,left=200,width=640,height=480,scrollbars=yes,location=no,toolbar=no,directories=no,status=no,menubar=no,resizable=yes');n";
evaltext=evaltext+" i=0;n";
evaltext=evaltext+" while(i != 1)n";
evaltext=evaltext+" {n";
evaltext=evaltext+" if (!"+ namewin +".closed)n";
evaltext=evaltext+" {n";
evaltext=evaltext+" if ((!"+ namewin +".closed) && ("+ namewin +".document.getElementById('ItBody')!=null) && ("+ namewin +".document.getElementById('modhref')!=null)) {i=1; break;}n";
evaltext=evaltext+" } else break;n";
evaltext=evaltext+" }n";
evaltext=evaltext+" //alert('переменная= '+"+ namewin +"+' i= '+i+' clos= '+"+ namewin +".closed)n";
evaltext=evaltext+" if ((i==1) && ("+ namewin +"!=null) && (!"+ namewin +".closed))n";
evaltext=evaltext+" {n";
evaltext=evaltext+" "+ namewin +".document.body.resourceobj=name_resourceobj;n";
evaltext=evaltext+" "+ namewin +".document.body.priflabel = name_priflabel;n";
evaltext=evaltext+" "+ namewin +".document.getElementById('dgdgdgdgdgdg').value = name_priflabel;n";
evaltext=evaltext+" }n";

//evaltext=evaltext+" "+ namewin +".document.body.newAttribute = 'priflabel';n";
//newAttribute = "defclass";
err=0;
try
{
err=1;
temp="NewOpenWin="+namewin;
eval(temp);
if ((NewOpenWin!=null) && (!NewOpenWin.closed)) //окно уже есть и не закрыто
{
NewOpenWin.focus();
} else {err=2; eval(evaltext);}
}
catch (exception)
{
if (err==1)
{
try
{
//alert(evaltext);
eval(evaltext);
}
catch (exception)
{
objbutton.focus();
alert("При загрузке новой страницы, произошла ошибка.");
}
}
}
}
}
else
{
objbutton.style.display = 'none';
alert("Системная ошибка.n?2507");
}
return true;
}

Код открывает новое окно и устанавливает параметры priflabel и name_resourceobj для body нового окна. У меня ОЧЕНЬ ИНТЕРЕСНЫЙ ВОПРОС, поясню:

 evaltext=evaltext+" if ((!"+ namewin +".closed) && ("+ namewin +".document.getElementById('ItBody')!=null) && ("+ namewin +".document.getElementById('modhref')!=null)) {i=1; break;}n";

Жд?т пока объекты будут доступны. - modhref выставлен перед

Link to comment
Share on other sites

  • 0

Spavel_74, дело в том, что Вы сами, т.с. своими руками, "убиваете" интерес к вашей проблеме и желание помочь Вам ее разрешить каким-нибудь образом.

Во-первых, взяв ради примера второй фрагмент вашего кода и обнаружив в нем строку, длиной в 204 символа, любой поймет, что тут необходимо редактирование. Этим заниматься мало кому захочется. Я вот еще год назад с удовольствием этим занимался, а теперь просто надоело (вот надоело и все, и ничего не могу с собой поделать :) ).

Во-вторых, Вам необходимо сделать тестовый пример. Поскольку Вы свою задачу решаете довольно своеобразно, то в вашем коде не очень просто разобраться. Вот если будет готовый пример, то, возможно, будет легче найти то, с чем Вы собираетесь "бороться".

По существу пока могу написать только следующее. Если Вы собираетесь "маникулировать с установленными свойствами priflabel и resourceobj от body", то почему бы Вам сразу не обратиться к нужным значениям? Ведь эти значения Вы сами же и устанавливаете в св-ва body.

Link to comment
Share on other sites

  • 0
По существу пока могу написать только следующее. Если Вы собираетесь "маникулировать с установленными свойствами priflabel и resourceobj от body", то почему бы Вам сразу не обратиться к нужным значениям? Ведь эти значения Вы сами же и устанавливаете в св-ва body.

Конечно же я обращаюсь к свойствам обьекта body в ново созданом окне , Дело в том что в Opera свойства забираются и вс? ок , a в IE cтавлю alert и после него доступны.

Я просто непойму что не нравится IE?

<body onFocus='CheckResourceObj(this);' resourceobj='' priflabel='' id='ItBody' >
<script>
alert ("для IE"); //
trtstd=self.document.getElementById("ItBody");
valresourceobj=trtstd.resourceobj;
var temp="obj_receiver=window.opener.document."+valresourceobj+";";
eval(temp);
n=0;
while(n != obj_receiver.length)
{
self.document.write(obj_receiver.options[n].text+"</br>");
n=n+1;
}
</script>
</body>

Link to comment
Share on other sites

  • 0
Конечно же я обращаюсь к свойствам обьекта body в ново созданом окне...

Это понятно. Но Вы ведь писали, что:

Код открывает новое окно и устанавливает параметры priflabel и name_resourceobj для body нового окна.

Из этого следует, что Вы сначала присваиваете какие-то значения, а затем тут же пытаетесь их получить. Что за "хитрый" алгоритм, в чем уловка?

По делу могу предположить следующее (опять предположить, т.к. тест-кэйс так и не появился). В браузере IE события происходят в ином порядке, чем в Opera. А поскольку именно alert способен в IE нарушить очередность выполнения js-функций, то поэтому Вы получаете то, что без alert - "тишина", с alert - то, что нужно. Вывод - необходим тест для проверки хода выполнения вашего сценария.

Link to comment
Share on other sites

  • 0
Из этого следует, что Вы сначала присваиваете какие-то значения, а затем тут же пытаетесь их получить. Что за "хитрый" алгоритм, в чем уловка?

У родителя есть на форме есть select например

 <select name='section' id='section' class='classobj200px' errclass='errclassobj200px' notnull='1' formatval='0' size='1' relnum='5,1' onChange='ChangeRelation(this.form,this);'>
<option value='0' >Не выбранно</option>
<option value='1' >Недвижимость</option>
<option value='2' >Стройматериалы</option>
</select>
<input type='button' value=' » ' id='openmore_section' name='openmore_section' fieldform_id='72' priflabel='fid15_2lab_' onClick='OpenMoreData(this.form,"section");'>

такие select создаются в php как объекты где пользователь может указать все атрибуты включая и его id и имя. (из админской части кмс)

В коде за select видете кнопку которая открывает окно (OpenMoreData(this.form,"section"):) -код функции указан выше.

В новом окне в body.resourceobj присваивается это "имя формы.section"

Таким образом в новом окне я знаю не только кто родитель у окна (window.opener) , но и

какой объект порадил его.

В новом окне показывается расширенная информация о данных в виде таблицы,

пользователь ищет нужную запись -> onDblClick -> self.close() -> в родитеском окне в объекте имя формы.section меняется значение (value)

опять предположить, т.к. тест-кэйс так и не появился

Выложить немогу т.к эта вся каша у меня на localhost

Link to comment
Share on other sites

  • 0

Всем Hello.

Отрепетеровав все скрипты на Opera и IE, поставил Mozilla.

В консоли ошибок вс? ок но:

1 выдаэтся сообщение при нажатии кнопки ">>" - "Скрипт на этой странице возможно занят или неотвечает ...... Остановить, продолжить"

Это из-за кода в файле http://www.web-catalog.info/scriptbet/formtest.js

evaltext=evaltext+" if (!"+ namewin +".closed)n";
evaltext=evaltext+" {n";
evaltext=evaltext+" if ((!"+ namewin +".closed) && ("+ namewin +".document.getElementById('ItBody')!=null)) {i=1; break;}n";
evaltext=evaltext+" } else break;n";
evaltext=evaltext+" }n";

это делается чтобы дождатся доступа к объекту body в новом окне, затем установить свойства

evaltext=evaltext+" "+ namewin +".document.body.resourceobj=name_resourceobj;n";
evaltext=evaltext+" "+ namewin +".document.body.priflabel = name_priflabel;n";

2 Окно открывается в в новом окне а не в вкладке как у оперы

evaltext=" var line = 'openmoredata.php?idfield='+fieldform_id;n";
evaltext=evaltext+" "+ namewin +" =window.open(line,namewin,'top=150,left=200,width=640,height=480,scrollbars=yes,location=no,toolbar=no,directories=no,status=yes,menubar=no,resizable=yes');n";

3 В новом окне не работает функция SetIdForResourceMultiObj (Ctrl + клик) из файла http://www.web-catalog.info/scriptbet/openmoredata.js, заместо этого выделяет бордером td

Поскажите что ненравится Mozilla :)

http://www.web-catalog.info/scriptbet/ - рабочая версия под Opera и IE

Посмотреть внутриности openmoredata.php

http://www.web-catalog.info/scriptbet/openmoredata.txt

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy